package com.clienterestful.bo;

import com.clienterestful.util.RESTFulservice;
import com.sun.jersey.api.client.UniformInterfaceException;
import com.sun.jersey.api.client.WebResource;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

public class PersonaBO {
    private final String sRecurso="persona";
    private WebResource wrRecurso;
       
    public PersonaBO(){
        //obtenemos el recurso de la coneccion al servicio
        this.wrRecurso= (new RESTFulservice()).getWebResource(this.sRecurso);
    }
    /**
     * @param persona
     * @descripcion: metodo que crea un usuario apartir de un xml
     */
    public void addPersonaXML(Object persona) throws UniformInterfaceException{
        WebResource recurso=this.wrRecurso;
        recurso.type(MediaType.APPLICATION_XML).post(persona);
    }
    /**
     * @param persona
     * @descripcion: metodo que crea un usuario apartir de un json
     *
     */
    public void addPersonaJSON(Object persona)throws UniformInterfaceException{
        WebResource recurso=this.wrRecurso;
        recurso.type(MediaType.APPLICATION_JSON).post(persona);
    }
    /**
     * @param persona
     * @descripcion: metodo que modifica un usuario apartir de un xml
     */
    public void editPersonaXML(Object persona)throws UniformInterfaceException{
        WebResource recurso=this.wrRecurso;
        recurso.type(MediaType.APPLICATION_XML).put(persona);
    }
    /**
     * @param persona
     * @descripcion: metodo que modifica un usuario apartir de un xml
     */
    public void editPersonaJSON(Object persona)throws UniformInterfaceException{
        WebResource recurso=this.wrRecurso;
        recurso.type(MediaType.APPLICATION_JSON).put(persona);
    }
    /** 
     *  @param id
     *  
     */
    public void deletePersona(String id)throws UniformInterfaceException{
        WebResource recurso=this.wrRecurso;
        recurso.path(java.text.MessageFormat.format("{0}", new Object[]{id})).delete();
    }
    public <T> T findPersonaXML(Class<T> responseType, String id)
    throws UniformInterfaceException{
        WebResource recurso=this.wrRecurso;
        recurso.path(java.text.MessageFormat.format("{0}",new Object[]{id}));
        return recurso.accept(MediaType.APPLICATION_XML).get(responseType);
        
    }
    public <T> T findPersonaJSON(Class<T> responseType, String id)
    throws UniformInterfaceException{
        WebResource recurso=this.wrRecurso;
        recurso.path(java.text.MessageFormat.format("{0}",new Object[]{id}));
        return  recurso.accept(MediaType.APPLICATION_JSON).get(responseType);
        
    }
    /** 
     * @param <T>
     * @param responseType
     * @return 
     */
    public <T> T findAllPersonasXML(Class<T> responseType)
    throws UniformInterfaceException{
        WebResource recurso=this.wrRecurso;
        return recurso.accept(MediaType.APPLICATION_XML).get(responseType);
    }
    /** 
     * @param <T>
     * @param responseType
     * @return 
     */
    public <T> T findAllPersonasJSON(Class<T> responseType)
    throws UniformInterfaceException{
         WebResource recurso=this.wrRecurso;
        return recurso.accept(MediaType.APPLICATION_JSON).get(responseType);
    }
    /**
     * Devuelve las citas de la persona segun los filtros que se especifiquen
     * @param <T>
     * @param responseType
     * @param idPersona
     * @param to
     * @param from
     * @param idCalendar
     * @param numCitas
     * @return 
     * 
     */
    public <T> T findByCitaPersonaXML(Class<T> responseType, String idPersona,
                                       String to, String from, String idCalendar,
                                       String numCitas)
    throws UniformInterfaceException{
        WebResource recurso=this.wrRecurso;
        if(to!=null && !to.equals("")){
            recurso = recurso.queryParam("to", to);
        }
        if(from!=null && !from.equals("")){
            recurso = recurso.queryParam("from", from);
        }
        if(idCalendar!=null && !idCalendar.equals("")){
            recurso = recurso.queryParam("idCalendar", from);
        }
        if(numCitas!=null && !numCitas.equals("")){
            recurso = recurso.queryParam("numCitas", from);
        }
        recurso=recurso.path(java.text.MessageFormat.format("{0}/citas", new Object[]{idPersona}));        
        return recurso.accept(MediaType.APPLICATION_XML).get(responseType);
    }
    /**
     * Devuelve las citas de la persona segun los filtros que se especifiquen
     * @param <T>
     * @param responseType
     * @param idPersona
     * @param to
     * @param from
     * @param idCalendar
     * @param numCitas
     * @return 
     * 
     */
    public <T> T findByCitaPersonaJSON(Class<T> responseType, String idPersona,
                                       String to, String from, String idCalendar,
                                       String numCitas)
    throws UniformInterfaceException{
        WebResource recurso=this.wrRecurso;
        if(to!=null && !to.equals("")){
            recurso = recurso.queryParam("to", to);
        }
        if(from!=null && !from.equals("")){
            recurso = recurso.queryParam("from", from);
        }
        if(idCalendar!=null && !idCalendar.equals("")){
            recurso = recurso.queryParam("idCalendar", from);
        }
        if(numCitas!=null && !numCitas.equals("")){
            recurso = recurso.queryParam("numCitas", from);
        }
        recurso=recurso.path(java.text.MessageFormat.format("{0}/citas", new Object[]{idPersona}));        
        return recurso.accept(MediaType.APPLICATION_JSON).get(responseType);
    }
   
   public <T> T findCitaPublicaPersonaXML(Class<T> responseType, String idPersona,
                                       String to, String from, String idCalendar,
                                       String numCitas)throws UniformInterfaceException{
       WebResource recurso=this.wrRecurso;
        if(to!=null && !to.equals("")){
            recurso = recurso.queryParam("to", to);
        }
        if(from!=null && !from.equals("")){
            recurso = recurso.queryParam("from", from);
        }
        if(idCalendar!=null && !idCalendar.equals("")){
            recurso = recurso.queryParam("idCalendar", from);
        }
        if(numCitas!=null && !numCitas.equals("")){
            recurso = recurso.queryParam("numCitas", from);
        }
        recurso=recurso.path(java.text.MessageFormat.format("{0}/calendario/publicos/citas", new Object[]{idPersona}));        
        return recurso.accept(MediaType.APPLICATION_XML).get(responseType);
   }
   public <T> T findCitaPublicaPersonaJSON(Class<T> responseType, String idPersona,
                                       String to, String from, String idCalendar,
                                       String numCitas)throws UniformInterfaceException{
        WebResource recurso=this.wrRecurso;
        if(to!=null && !to.equals("")){
            recurso = recurso.queryParam("to", to);
        }
        if(from!=null && !from.equals("")){
            recurso = recurso.queryParam("from", from);
        }
        if(idCalendar!=null && !idCalendar.equals("")){
            recurso = recurso.queryParam("idCalendar", from);
        }
        if(numCitas!=null && !numCitas.equals("")){
            recurso = recurso.queryParam("numCitas", from);
        }
        recurso=recurso.path(java.text.MessageFormat.format("{0}/calendario/publicos/citas", new Object[]{idPersona}));        
        return recurso.accept(MediaType.APPLICATION_JSON).get(responseType);
   }
   
   public <T> T findCalendariosPublicoPersonaXML(Class<T> responseType, String idPersona)
   throws UniformInterfaceException{
       WebResource recurso=this.wrRecurso;
       recurso=recurso.path(java.text.MessageFormat.format("{0}/calendario/publicos", new Object[]{idPersona}));
       return recurso.accept(MediaType.APPLICATION_XML).get(responseType);
   }
   public <T> T findCalendariosPublicoPersonaJSON(Class<T> responseType, String idPersona)
   throws UniformInterfaceException{
       WebResource recurso=this.wrRecurso;
       recurso=recurso.path(java.text.MessageFormat.format("{0}/calendario/publicos", new Object[]{idPersona}));
       return recurso.accept(MediaType.APPLICATION_JSON).get(responseType);
   }
   public <T> T findCalendariosPrivadosPersonaXML(Class<T> responseType, String idPersona)
   throws UniformInterfaceException{
       WebResource recurso=this.wrRecurso;
       recurso=recurso.path(java.text.MessageFormat.format("{0}/calendario/privados", new Object[]{idPersona}));
       return recurso.accept(MediaType.APPLICATION_XML).get(responseType);
   }
   public <T> T findCalendariosPrivadosPersonaJSON(Class<T> responseType, String idPersona)
   throws UniformInterfaceException{
       WebResource recurso=this.wrRecurso;
       recurso=recurso.path(java.text.MessageFormat.format("{0}/calendario/privados", new Object[]{idPersona}));
       return recurso.accept(MediaType.APPLICATION_JSON).get(responseType);
   }
   
   public <T> T findCalendariosPersonaXML(Class<T> responseType, String idPersona)
    throws UniformInterfaceException{
       WebResource recurso=this.wrRecurso;
       recurso=recurso.path(java.text.MessageFormat.format("{0}/calendarios", new Object[]{idPersona}));
       System.out.println("-->"+recurso.getURI());
       return recurso.accept(MediaType.APPLICATION_XML).get(responseType);
       
   }
    public <T> T findCalendariosPersonaJSON(Class<T> responseType, String idPersona)
    throws UniformInterfaceException{
       WebResource recurso=this.wrRecurso;
       recurso=recurso.path(java.text.MessageFormat.format("{0}/calendarios", new Object[]{idPersona}));
       return recurso.accept(MediaType.APPLICATION_JSON).get(responseType);
       
   }
   
}
